// 戴朋

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main() {
  ll n, k, x;
  cin >> n >> k >> x;  // 输入字符串数量n，组合长度k，查询的索引x
  vector<string> S(n); // 存储n个原始字符串
  for (int i = 0; i < n; i++) {
    cin >> S[i]; // 读取每个字符串
  }

  int cnt = pow(n, k); // 计算所有可能的组合数(n^k)

  vector<string> ans; // 存储所有可能的组合字符串
  for (ll i = 0; i < cnt; i++) {
    // 将i转换为n进制数，表示当前组合的选择序列
    vector<int> seq(k); // 存储当前组合的选择索引
    ll tmp = i;         // 使用类似n进制的方式来表示组合
    for (int j = k - 1; j >= 0; j--) {
      seq[j] = tmp % n; // 获取当前位的选择索引
      tmp /= n;         // 移动到下一位
    }

    // 构建组合字符串
    string ss;
    int total = 0;
    for (int j = 0; j < k; j++) {
      total += S[seq[j]].size(); // 计算总字符数
    }
    ss.reserve(total); // 预分配空间
    for (int j = 0; j < k; j++) {
      ss += S[seq[j]]; // 拼接字符串
    }
    ans.push_back(ss); // 添加到结果集
  }

  sort(ans.begin(), ans.end()); // 对所有组合字符串排序
  cout << ans[x - 1] << endl;   // 输出第x个组合(1-based索引)
  return 0;
}